﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CoopSaude.Dao;

namespace CoopSaude.Dto
{
    public class ProcedimentoDTO
    {
        #region public properties
		public int Id { get; set; }
		public string IdMedico { get; set; }
        public System.DateTime Data { get; set; }
		public string Descricao { get; set; }
		public string IdPaciente { get; set; }
        public ProcedimentoMedico.SerializedItemProcedimento[] Itens;
		#endregion

		#region constructors
        public ProcedimentoDTO()
        {
        }
	        
		private ProcedimentoDTO(ProcedimentoMedico.SerializedProcedimento procedimento)
		{
			Id = procedimento.id;
			IdMedico = procedimento.idMedico;
			Data = procedimento.dataPresc;
			Descricao = procedimento.descricao;
		}

		private ProcedimentoDTO(ProcedimentoMedico.SerializedProcedimento procedimento, string idPaciente)
		{
			Id = procedimento.id;
			IdMedico = procedimento.idMedico;
			Data = procedimento.dataPresc;
			Descricao = procedimento.descricao;
			IdPaciente = idPaciente;
		}
		#endregion

		#region static methods
		public static ProcedimentoDTO CriarProcedimento(string idMedico, string idPaciente, string descricao, ProcedimentoMedico.SerializedItemProcedimento[] lsItens)
		{
            ProcedimentoDTO p = new ProcedimentoDTO(ProcedimentoDAO.AdicionarProcedimento(idPaciente, idMedico, descricao, lsItens), idPaciente);
            return p;
        }

        public static ProcedimentoDTO BuscarSessao(int idProcedimento)
		{
			return new ProcedimentoDTO(ProcedimentoDAO.VisualizarProcedimento(idProcedimento));		
        }

		public static List<ProcedimentoDTO> ListarProcedimentos(string idMedico, string idPaciente)
		{
            List<ProcedimentoDTO> procedimentos = new List<ProcedimentoDTO>();
            foreach(var p in ProcedimentoDAO.ListarProcedimentos(idPaciente, idMedico))
            {
                ProcedimentoDTO procedDTO = new ProcedimentoDTO(p, idPaciente);
                procedimentos.Add(procedDTO);
            }
            return procedimentos.OrderBy(x => x.Data).ToList();
		}
		#endregion
    }
}